package Java_Concurrency_in_Practice.c7_1_4;

import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class TimedRun {
    private static final ScheduledExecutorService cancleExec = null;

    /**
     * 此处是指定时间内运行一个任意Runnable的示例.
     * 它在调用线程中运行任务, 并安排了一个取消任务, 在运行指定的时间间隔后中断它.
     * 这解决了从任务中抛出未检查异常的问题, 因为该异常会被timedRun的调用者捕获.
     *
     * 但它却破坏了如下原则:
     * 在中断线程之前应该了解它的中断策略.
     * 如果任务在超时之前完成, taskThread.interrupt()有可能造成很不好的结果.
     * 另外, 此处的任务不响应中断.
     * */
    public static void timedRun(Runnable r, long timeout, TimeUnit unit) {
        final Thread taskThread = Thread.currentThread();
        cancleExec.schedule(new Runnable() {
            @Override
            public void run() {
                taskThread.interrupt();
            }
        }, timeout, unit);
        r.run();
    }
}
